/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cz.hamacekj.geometr.plugin;

/**
 * Jedna možnost vstupních parametrů. Reprezentuje jednu množinu vstupních
 * parametrů, ze které lze vytvořit cílový objekt.
 * @author hamacekh
 */
public interface InputParametersInterface {
    /**
     * Vrátí jméno této možnosti. Bude zobrazeno v GUI
     * (například pro přímku sestrojenou pomocí dvou bodů by to mohl být řetězec "2 body")
     * @return Jméno této možnosti.
     */
    public String getParametersCaption();
    /**
     * Pole parametrů podle toho, jak mají být zobrazeny v GUI. Ve stejném pořadí potom budou předávány při
     * {@link ConstructionPlugin#createConstructionObject(cz.hamacekj.geometr.plugin.InputParametersInterface, cz.hamacekj.geometr.plugin.ConstructionObject[], cz.hamacekj.geometr.plugin.ValueArgument[]) vytváření}
     * objektu.
     * @return Pole parametrů.
     */
    public ParameterItem[] getParameters();
    
    /**
     * Kolik musí být nakreslených kroků aby bylo možné objekt vytvořit pomocí
     * tohoto typu parametrů. 0 = žádný krok není vyžadován.
     * @return Minimum nakreslených kroů.
     */
    public int getMinStepsToShow();
    
    /**
     * Maximum nakreslených kroků aby bylo možné vytvořit objekt pomocí tohoto
     * typu parametrů. -1 = není omezeno shora.
     * @return Maximum nakreslených kroků.
     */
    public int getMaxStepsToShow();
    
    /**
     * Vrátí nápovědu k tomuto typu parametrů. Nápověda je ve formátu html.
     * @return Nápověda.
     */
    public String getHelp();
}
